import { Sensor, SensorDataSet, Stamp } from 'store';

export const onSetSensorData = (
  sensors: Sensor[],
  {
    channelNumber,
    sequenceNumber,
    uint8T,
  }: SensorDataSet,
) => {
  // Отказ, если кривой канал или нет совсем/мало/много данных
  if (![2, 3].includes(channelNumber) || !uint8T?.length || uint8T.length !== 4) {
    return sensors;
  }

  const result = [...sensors];
  const isChannel2 = channelNumber === 2;

  const stamp: Stamp = {
    date: new Date(),
    smoke: (uint8T[0] << 8) + uint8T[1],
    temperature: (uint8T[2] << 8) + uint8T[3],
  };

  const sensor = result.find(
    (sensor) => (
      isChannel2 && (sensor.channel2.sequenceNumber === sequenceNumber)
    ) || (
      !isChannel2 && (sensor.channel3.sequenceNumber === sequenceNumber)
    )
  );

  // Первый приход с таким каналом и порядковым номером
  if (!sensor) {
    const newSensor: Sensor = {
      channel2: {
        sequenceNumber: isChannel2 ? sequenceNumber : null,
      },
      channel3: {
        sequenceNumber: !isChannel2 ? sequenceNumber : null,
      },
      serialNumber: '---',
      history: [stamp],
    };
    
    return [...sensors, newSensor]
  }
  
  // Найдена запись о сенсоре с таким каналом и порядковым номером 
  sensor.history.push(stamp);

  if (sensor.history?.length && sensor.history.length > 8) {
    sensor.history.splice(0, sensor.history.length - 8);
  }

  return result;
};
